﻿using Framework.Modelo;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using Framework.Modelo.ExtensionesBásicas;
using Framework.Mensajes.Modelo;

namespace FrameworkTest.ModeloTest
{
    [TestClass()]
    public class ObjetoTest
    {
        private TestContext testContextInstance;

        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        [TestMethod()]
        public void ObjetoConstructorTest()
        {
            Objeto target = new Objeto();
            Assert.IsInstanceOfType( target, typeof( IObjeto ) );
            Assert.AreNotEqual(new Guid(), target.Guid);
            Assert.AreEqual(EstadoDePersistencia.Creado, target.EstadoDePersistencia);
            Assert.AreEqual(ValoresPredeterminados.SinNombre, target.Nombre);
            Assert.IsNotNull(target.Tipo);
            Assert.AreEqual(ValoresPredeterminados.ObjetoGenerico, target.Tipo.Nombre);
        }

        [TestMethod()]
        public void GuidTest()
        {
            Objeto target = new Objeto();
            Guid actual;
            actual = target.Guid;
            Assert.IsInstanceOfType( actual, typeof( Guid ) );
        }

        [TestMethod()]
        public void EstadoDePersistenciaTest()
        {
            Objeto target = new Objeto();
            EstadoDePersistencia actual;
            actual = target.EstadoDePersistencia;
            Assert.IsInstanceOfType( actual, typeof( EstadoDePersistencia ) );
        }

        [TestMethod()]
        public void NombreTest()
        {
            Objeto target = new Objeto();
            string actual;
            actual = target.Nombre;
            Assert.AreNotEqual(String.Empty, actual);
        }

        [TestMethod()]
        public void TipoTestWithNull()
        {
            Objeto target = new Objeto();
            IObjeto expected = null;
            IObjeto actual;
            target.Tipo = expected;
            actual = target.Tipo;
            Assert.IsNotNull( actual );
        }

        [TestMethod()]
        public void TipoTestWithInstance()
        {
            Objeto target = new Objeto();
            IObjeto expected = new Objeto();
            IObjeto actual;
            target.Tipo = expected;
            actual = target.Tipo;
            Assert.AreEqual( expected, actual );
        }
    }
}
